package co.gov.medellin.ssti.sub.model.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;

import co.gov.medellin.ssti.sub.model.dao.BeneficioOtorgadoDAO;
import co.gov.medellin.ssti.sub.model.vo.RepBeneficioOtorgadoVO;

public class BeneficioOtorgadoDAOImpl2 extends NamedParameterJdbcDaoSupport
		implements BeneficioOtorgadoDAO {

	private String SELECT_BOT_BY_CRITERIA = "SELECT COUNT(BENEOTOR.CODIGO) CANTIDAD_OTORGADA, SEDE.CODIGO CODSEDE, "
			+ "SEDE.NOMBRE NOMSEDE, PROG.CODIGO CODPRO, PROG.NOMBRE NOMPRO, "
			+ "SUBPRO.CODIGO CODSUBPRO, SUBPRO.NOMBRE NOMSUBPRO, BENEOTOR.FECHA_BENEFICIO FECHABENEOTORGADO "
			+ "FROM TCS_BEN_PROGRAMA PROG, TCS_BEN_SUBPROGRAMA SUBPRO, "
			+ "TCS_BEN_BENEFICIO_OTORGADO BENEOTOR, TCS_BEN_SEDE SEDE "
			+ "WHERE BENEOTOR.SBPR_CODIGO =  SUBPRO.CODIGO "
			+ "AND BENEOTOR.SEDE_CODIGO = SEDE.CODIGO AND SUBPRO.PRG_CODIGO = PROG.CODIGO "
			+ "AND BENEOTOR.FECHA_BENEFICIO <= SYSDATE AND PROG.VIGENCIA='A' AND SUBPRO.VIGENCIA='A' "
			+ "AND SUBPRO.CODIGO = :CODIGO "
			+ "GROUP BY SEDE.CODIGO, SEDE.NOMBRE, PROG.CODIGO, PROG.NOMBRE, BENEOTOR.FECHA_BENEFICIO, "
			+ "SUBPRO.CODIGO, SUBPRO.NOMBRE ORDER BY PROG.NOMBRE,SUBPRO.NOMBRE,SEDE.NOMBRE";

	public List<RepBeneficioOtorgadoVO> loadAllBeneficiosBySubprograma(
			RepBeneficioOtorgadoVO param) {
		Map<String, Object> namedParameters = new HashMap<String, Object>();

		final String desde = param.getDesde();
		final String hasta = param.getHasta();

		namedParameters.put("CODIGO", param.getCodeSubprograma());

		List<RepBeneficioOtorgadoVO> beneficios = getNamedParameterJdbcTemplate()
				.query(SELECT_BOT_BY_CRITERIA, namedParameters,
						new RowMapper<RepBeneficioOtorgadoVO>() {
							public RepBeneficioOtorgadoVO mapRow(ResultSet rs,
									int rowNum) throws SQLException {
								RepBeneficioOtorgadoVO vo = new RepBeneficioOtorgadoVO();
								vo.setCodeSede(new Long(rs.getLong("CODSEDE")));
								vo.setNombreSede(rs.getString("NOMSEDE"));
								vo.setCodePrograma(new Long(rs
										.getLong("CODPRO")));
								vo.setNombrePrograma(rs.getString("NOMPRO"));
								vo.setCodeSubprograma(new Long(rs
										.getLong("CODSUBPRO")));
								vo.setNombreSubprograma(rs
										.getString("NOMSUBPRO"));
								vo.setDesde(desde);
								vo.setHasta(hasta);
								vo.setCantidad(rs
										.getString("CANTIDAD_OTORGADA"));
								vo.setFechabeneotorgado(rs
										.getString("FECHABENEOTORGADO"));
								return vo;
							}
						});
		return beneficios;
	}
}
